package string

import "unicode"

// 是否为有效回文字符串
// 双指针

func IsPalindrome(s string) bool {
	l := 0
	r := len(s) - 1
	for l < r {
		// l 不是数字和小写字母
		if !unicode.IsDigit(rune(s[l])) && !unicode.IsLetter(rune(s[l])) {
			l++
			continue
		}
		// r 不是数字和小写字母
		if !unicode.IsDigit(rune(s[r])) && !unicode.IsLetter(rune(s[r])) {
			r--
			continue
		}
		if unicode.IsDigit(rune(s[l])) { // 数字
			if s[l] != s[r] {
				return false
			}
		} else {
			if unicode.ToLower(rune(s[l])) != unicode.ToLower(rune(s[r])) { // 小写字母
				return false
			}
		}
		l++
		r--
	}
	return true
}

func isPalindrome(s string) bool {
	l, r := 0, len(s)-1
	for l < r {
		if !unicode.IsDigit(rune(s[l])) && !unicode.IsLetter(rune(s[l])) {
			l++
			continue
		}
		if !unicode.IsDigit(rune(s[r])) && !unicode.IsLetter(rune(s[r])) {
			r++
			continue
		}
		if unicode.IsDigit(rune(l)) {
			if s[l] != s[r] {
				return false
			}
		} else {
			if unicode.ToLower(rune(s[l])) != unicode.ToLower(rune(s[r])) {
				return false
			}
		}
	}
	return true
}
